#include "PagePreprocess/DirScanner.h"
#include <dirent.h>
#include <iostream>
#include <cstring>



DirScanner::DirScanner()
{

}
void DirScanner::operator()()  //重载函数调用运算符，调用traverse函数
{
    traverse("data/人民网语料");
}
vector<string> & DirScanner::getfiles() //返回_vecFilesfiles的引用
{
    return _files;
}

void DirScanner::traverse(const string & dirname) //获取某一目录下的所有文件
{
    //打开文件夹，递归处理每一个文件
    DIR * dir = opendir(dirname.c_str());
    if(dir==NULL){
        LogDebug("打开文件夹失败");
    }

    struct dirent* p;
    while((p=readdir(dir))!=NULL)
    {
        if(strcmp(p->d_name,".")==0||strcmp(p->d_name,"..")==0) //排除当前目录和上一级目录
            continue;
        string fullpath = dirname + "/" + p->d_name;
        if(DT_REG == p->d_type) //如果是普通文件，则加入到vector中
        {
            _files.push_back(fullpath);
        }
        else if(DT_DIR == p->d_type) //如果是文件夹，则递归调用traverse函数
        {
            traverse(fullpath);
        }
    }
    closedir(dir);
}